#include <cstdio>
#include <cstdlib>

#include "De.H"
#include "Joueur.H"




void initJoueur(Joueur & j,int nbJoueursDejaEnregistres)
{
    j.Nom=new char[80];
    std::printf("Nom du joueur: ");
    std::scanf("%79s",j.Nom);
    j.NumeroPassage=nbJoueursDejaEnregistres-1;
    j.Position=0;
    j.Score=0;
    j.NbCartePasseSonTour=0;
    j.NbCarteRepond2Questions=0;
    j.NbCarteRefileQuestion=0;
    j.CompteurGuillet=0;
}


//Accesseurs

char* nomJoueur(const Joueur & j)
{
    return j.Nom;
}


int numeroPassageJoueur(const Joueur & j)
{
    return j.NumeroPassage;
}


int positionJoueur(const Joueur & j)
{
    return j.Position;
}


int scoreJoueur(const Joueur & j)
{
    return j.Score;
}


int nbCartePasseSonTourJoueur(const Joueur & j)
{
    return j.NbCartePasseSonTour;
}


int nbCarteRepond2QuestionsJoueur(const Joueur & j)
{
    return j.NbCarteRepond2Questions;
}


int nbCarteRefileQuestion(const Joueur & j)
{
    return j.NbCarteRefileQuestion;
}

int compteurGuilletJoueur(const Joueur & j)
{
    return j.CompteurGuillet;
}



//Mutateurs

void deplaceJoueur(Joueur & j)
{
    int lancer=lance();
    printf("Lancer: %d ",lancer);
    deplaceSelonNombreJoueur(j,lancer);
}


void deplaceSelonNombreJoueur(Joueur & j,int nb)
{
    j.Position=(j.Position + nb)%32;
    char* nom=nomJoueur(j);
    printf("Nouvelle position du joueur %s: %d \n",nom,j.Position);
}

void deplaceSelonCase(Joueur & j,int pos)
{
    j.Position=pos;
}

void pertePointJoueur(Joueur & j,const int & nbPoint)
{
    j.Score=j.Score-nbPoint;
}


void gainPointJoueur(Joueur & j,const int & nbPoint)
{
    j.Score=j.Score+nbPoint;
}


void incrementeNbCartePasseSonTourJoueur(Joueur & j)
{
    j.NbCartePasseSonTour=j.NbCartePasseSonTour+1;
}


void decrementeNbCartePasseSonTourJoueur(Joueur & j)
{
    j.NbCartePasseSonTour=j.NbCartePasseSonTour-1;
}


void incrementeNbCarteRepond2QuestionsJoueur(Joueur & j)
{
    j.NbCarteRepond2Questions=j.NbCarteRepond2Questions+1;
}


void decrementeNbCarteRepond2QuestionsJoueur(Joueur & j)
{
    j.NbCarteRepond2Questions=j.NbCarteRepond2Questions-1;
}


void incrementeCompteurGuilletJoueur(Joueur & j)
{
    j.CompteurGuillet=j.CompteurGuillet+3;
}


void decrementeCompteurGuilletJoueur(Joueur & j)
{
    j.CompteurGuillet=j.CompteurGuillet-1;
}


void videCompteurGuilletJoueur(Joueur & j)
{
    j.CompteurGuillet=0;
}


void incrementeNbCarteRefileQuestionJoueur(Joueur & j)
{
    j.NbCarteRefileQuestion=j.NbCarteRefileQuestion+1;
}


void decrementeNbCarteRefileQuestionJoueur(Joueur & j)
{
    j.NbCarteRefileQuestion=j.NbCarteRefileQuestion-1;
}

//Fonctions

void eliminationJoueur(Joueur & j)
{
    if (j.Nom!=NULL)
    {
        delete[] j.Nom;
        j.Nom = NULL;
    }
}
